package cn.aiweiyi.qingjing.coupon.gateway.filter;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * @author 青衿
 * @Date 2020/11/13 9:21
 * token校验过滤器
 **/

/**
 * 用于在PRE阶段执行用户TOken认证的过滤器
 */
@Slf4j
@Component//该过滤器必须作为一个Bean才能生效
public class TokenFilter extends AbstractPreZuulFilter {

    String ERROR_MSG = "ERR:token为空或无效,用户认证失败! ";
    //该方法重写了父类抽象方法,实现过滤逻辑:token验证

    @Override
    protected Object cRun() {
        HttpServletRequest request = context.getRequest();
        log.info(String.format("%s方法请求%s", request.getMethod(),
                request.getRequestURL().toString()));
        Object token = request.getParameter("token");//获取请求参数
        if (token == null && isStaticFilter(token)) {
            log.info(ERROR_MSG);
            //401是HTTP协议规定的用户未授权,(Unauthorized)状态码
            return fail(401, ERROR_MSG);
        }
        return success();
    }

    //该方法用于判断token是否确定
    private boolean isStaticFilter(Object token) {
        return true;
    }

    //该返回值决定了过滤器在链中执行的顺序,为了便于以后扩展,建议不要
    //设置得最小(0)或最大,给以后留有扩展其他过滤器的余地
    @Override
    public int filterOrder() {
        return 2;
    }
}
